/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Modelo.DAL;

import Modelo.Inspeccion;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import org.json.JSONObject;
import org.json.JSONArray;

/**
 *
 * @author Patricia
 */
public class Inspeccion_DAO {

    public Inspeccion_DAO() {
    }

    public boolean insertarInspeccion(Inspeccion ins) {

        String query = "INSERT INTO inspeccion(fecha_inspeccion, motivo, nombre_empresa, "
                + "rif_empresa, nro_de_inspectores, nro_salida_campo, recomendaciones, "
                + "descripcion, actividad, tipo_inspeccion, fecha_ultima_modificacion)"
                + "VALUES (to_date(?, 'dd/mm/yyyy'),?,?,?,?,?,?,?,?,?, CURRENT_DATE)";

        ConexionBD conexion = new ConexionBD();
        PreparedStatement s = null;
        try {
            s = conexion.session.prepareStatement(query);
            s.setString(1, ins.getFechaInspeccion());
            s.setString(2, ins.getMotivo());
            s.setString(3, ins.getNombreEmpresa());
            s.setString(4, ins.getRifEmpresa());
            s.setInt(5, Integer.parseInt(ins.getNroDeInspectores()));
            s.setInt(6, Integer.parseInt(ins.getNroSalidaCampo()));
            s.setString(7, ins.getRecomendaciones());
            s.setString(8, ins.getDescripcion());
            s.setString(9, ins.getActividad());
            s.setString(10, ins.getTipoInspeccion());
            System.out.println(s);
            int retorno = s.executeUpdate();
            System.out.println(retorno);
            return true;

        } catch (SQLException sqle) {
            System.out.println("Error Insertando Inspeccion! " + sqle.getMessage());
            return false;
        }
    }

    public static JSONObject consultarInspeccion(Inspeccion ins, String limit, String offset, String order, String asc) {
        ConexionBD conexion = new ConexionBD();
        Statement s = null;
        ResultSet rs = null;
        JSONObject inspecciones = new JSONObject();
        try {
            s = conexion.session.createStatement();
        } catch (SQLException se) {
            System.out.println("Error Consultando las Inspecciones!");
            return null;
        }

        try {
            String query = "SELECT ins.numero_inspeccion, to_char(ins.fecha_inspeccion,'DD-MM-YYYY'), "
                    + "ins.motivo, ins.nombre_empresa, ins.rif_empresa, ins.nro_de_inspectores, "
                    + "ins.nro_salida_campo, ins.recomendaciones, ins.descripcion, "
                    + "ins.actividad, ins.tipo_inspeccion, to_char(ins.fecha_ultima_modificacion,'DD-MM-YYYY') "
                    + "from inspeccion ins "; //to_char(a.fecha_modificacion,'DD-MM-YYYY') "
            String params = "WHERE (1=1) ";
            if (ins.getNumeroInspeccion() != null && !ins.getNumeroInspeccion().equals("")) {
                params += "and ins.numero_inspeccion = '" + ins.getNumeroInspeccion() + "' ";
            }
            if (ins.getTipoInspeccion() != null && !ins.getTipoInspeccion().equals("")) {
                params += "and ins.tipo_inspeccion = '" + ins.getTipoInspeccion() + "' ";
            }
            if (ins.getNombreEmpresa() != null && !ins.getNombreEmpresa().equals("")) {
                params += "and lower(ins.nombre_empresa) LIKE '%" + ins.getNombreEmpresa().toLowerCase() + "%' ";
            }
            if (ins.getFechaInspeccion() != null && !ins.getFechaInspeccion().equals("")) {
                params += "and ins.fecha_inspeccion = '" + ins.getFechaInspeccion() + "' ";
            }
            if (ins.getRifEmpresa() != null && !ins.getRifEmpresa().equals("")) {
                params += "and ins.rif_empresa = '" + ins.getRifEmpresa() + "' ";
            }

            String format = "";
            if (order != null && !order.equals("")) {
                format += " order by " + order;
                if (asc != null && !asc.equals("") && asc.equals("false")) {
                    format += " desc";
                } else {
                    format += " asc";
                }
            }

            if (limit != null && !limit.equals("")) {
                format += " limit " + limit;
            }
            if (offset != null && !offset.equals("")) {
                format += " offset " + offset;
            }

            rs = s.executeQuery(query + params + format);
            JSONArray ja = new JSONArray();
            int i = 0;
            while (rs.next()) {
                JSONObject inspeccion = new JSONObject();
                inspeccion.put("numero_inspeccion", rs.getString(1));
                inspeccion.put("fecha_inspeccion", rs.getString(2));
                inspeccion.put("motivo", rs.getString(3));
                inspeccion.put("nombre_empresa", rs.getString(4));
                inspeccion.put("rif_empresa", rs.getString(5));
                inspeccion.put("nro_de_inspectores", rs.getString(6));
                inspeccion.put("nro_salida_campo", rs.getString(7));
                inspeccion.put("recomendaciones", rs.getString(8));
                inspeccion.put("descripcion", rs.getString(9));
                inspeccion.put("actividad", rs.getString(10));
                inspeccion.put("tipo_inspeccion", rs.getString(11));
                inspeccion.put("fecha_ultima_modificacion", rs.getString(12));

                ja.put(i++, inspeccion);

            }
            inspecciones.put("inspecciones", ja);


            query = "select count(*) from inspeccion ins " + params;
            rs = s.executeQuery(query);
            if (rs.next()) {
                inspecciones.put("tam", rs.getString(1));
            }
            return inspecciones;
        } catch (SQLException se) {
            System.out.println("Error Consultado la inspeccion\n" + se.getMessage());
            return inspecciones;
        } catch (Exception e) {
            System.out.println("Error obteniendo data de la inspeccion\n" + e.getMessage());
            return inspecciones;
        }
    }

    public static boolean actualizarInspeccion(Inspeccion e) {

        String query = "UPDATE inspeccion set "
                + "fecha_inspeccion =  to_date(?, 'dd/mm/yyyy')"
                + ",motivo = ?"
                + ",nombre_empresa = ?"
                + ",rif_empresa= ?"
                + ",nro_de_inspectores= ?"
                + ",nro_salida_campo= ?"
                + ",recomendaciones= ?"
                + ",descripcion= ?"
                + ",actividad= ?"
                + ",tipo_inspeccion= ?"
                + ",fecha_ultima_modificacion = CURRENT_DATE"
                + " where numero_inspeccion = " + e.getNumeroInspeccion() + ";";
        System.out.println("\n\n\n\nQuery" + query + "\n\n\n\n");
        ConexionBD conexion = new ConexionBD();
        PreparedStatement s = null;

        try {
            s = conexion.session.prepareStatement(query);
            s.setString(1, e.getFechaInspeccion());
            s.setString(2, e.getMotivo());
            s.setString(3, e.getNombreEmpresa());
            s.setString(4, e.getRifEmpresa());
            s.setInt(5, Integer.parseInt(e.getNroDeInspectores()));
            s.setInt(6, Integer.parseInt(e.getNroSalidaCampo()));
            s.setString(7, e.getRecomendaciones());
            s.setString(8, e.getDescripcion());
            s.setString(9, e.getActividad());
            s.setString(10, e.getTipoInspeccion());


            System.out.println("\n\n\n\nQuery " + query + "\n\n\n\n");

            int retorno = s.executeUpdate();
            System.out.println("\n\n\n\nretorno" + retorno + "\n\n\n\n");
            return true;

        } catch (SQLException sqle) {
            System.out.println("Error Actualizando Inspeccion!\n" + sqle.getMessage());
            return false;
        }
    }
}
